/**
 * 
 */
package DAO;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import POJO.NguoiDung;
import Util.DataProvider;

/**
 * @author THIEUQUANG
 * 
 */
public class NguoiDungDAO
{
    /**
     * Lấy danh sách người dùng
     * 
     * @return Danh sách NguoiDung
     */
    public static ArrayList<NguoiDung> SelectNguoiDungALL()
    {
        ArrayList<NguoiDung> listNguoiDung = new ArrayList<NguoiDung>();
        try
        {
            String sql = "SELECT * FROM NGUOIDUNG";
            DataProvider dp = new DataProvider();
            dp.open();

            ResultSet rs = dp.ExecuteQuery(sql);
            while (rs.next())
            {
                NguoiDung nd = new NguoiDung();

                nd.setMaNguoiDung(rs.getInt("MaNguoiDung"));
                nd.setTenNguoiDung(rs.getNString("tenNguoiDung"));
                nd.setLoai(rs.getInt("loai"));
                nd.setMatKhau(rs.getString("matKhau"));
                nd.setGhiChu(rs.getNString("ghiChu"));

                listNguoiDung.add(nd);
            }
            dp.close();
        }
        catch (Exception e)
        {
            // TODO: handle exception
            System.out.println(e.getMessage());
        }
        return listNguoiDung;
    }

    /**
     * Rút trích một người dùng theo mã
     * 
     * @param Mã người dùng
     *            
     * @return Đối tượng NguoiDung
     */

    public static NguoiDung SelectNguoiDungById(String NguoiDungID)
    {
        NguoiDung nd = new NguoiDung();
        try
        {
            String sql = "SELECT * FROM NGUOIDUNG WHERE MANGUOIDUNG = "
                    + NguoiDungID;
            DataProvider dp = new DataProvider();
            dp.open();

            ResultSet rs = dp.ExecuteQuery(sql);
            while (rs.next())
            {
                nd.setMaNguoiDung(rs.getInt("MaNguoiDung"));
                nd.setTenNguoiDung(rs.getNString("tenNguoiDung"));
                nd.setLoai(rs.getInt("loai"));
                nd.setMatKhau(rs.getString("matKhau"));
                nd.setGhiChu(rs.getNString("ghiChu"));
            }
            dp.close();
        }
        catch (Exception e)
        {
            // TODO: handle exception
            System.out.println(e.getMessage());
        }
        return nd;
    }

    /**
     * Thêm một người dùng
     * 
     * @param Đối tượng NguoiDung
     *            
     * @return boolean
     */

    public static boolean InsertNguoiDung (NguoiDung nd)
    {
        boolean kq = false;

        String sql = String
                .format("INSERT INTO NGUOIDUNG (TENNGUOIDUNG, MATKHAU, LOAI, GHICHU) VALUES(N'%s', '%s', '%s', '%s')",
                        nd.getTenNguoiDung(), nd.getMatKhau(), nd.getLoai(), nd.getGhiChu());
        try
        {
            DataProvider dp = new DataProvider();
            dp.open();
            int i = dp.executeUpdate(sql);
            if (i == 1)
                kq = true;
            dp.close();
        }
        catch (ClassNotFoundException | SQLException e)
        {
            // TODO Auto-generated catch block
            System.out.println(e.getMessage());
        }
        return kq;
    }

    /**
     * Cập nhật thông tin người dùng
     * 
     * @param đối tượng NguoiDung
     *            
     * @return boolean
     */

    public static boolean UpdateNguoiDungById(NguoiDung nd)
    {
        boolean kq = false;

        String sql = String
                .format("UPDATE NGUOIDUNG SET TENNGUOIDUNG=N'%s', MATKHAU='%s', LOAI='%s', GHICHU='%s' WHERE MANGUOIDUNG='%s'",
                        nd.getTenNguoiDung(), nd.getMatKhau(), nd.getLoai(), nd.getGhiChu(), nd.getMaNguoiDung());
        try
        {
            DataProvider dp = new DataProvider();
            dp.open();
            int i = dp.executeUpdate(sql);
            if (i == 1)
                kq = true;
            dp.close();
        }
        catch (Exception e)
        {
            // TODO: handle exception
            System.out.println(e.getMessage());
        }
        return kq;
    }

    /**
     * Xóa một người dùng
     * 
     * @param Mã người dùng
     *            
     * @return boolean
     */

    public static boolean DeleteNguoiDungById(String MaNguoiDung)
    {
        boolean kq = false;

        String sql = String.format("DELETE FROM NGUOIDUNG WHERE MANGUOIDUNG='%s'",
                MaNguoiDung);

        try
        {
            DataProvider dp = new DataProvider();
            dp.open();
            int i = dp.executeUpdate(sql);
            if (i == 1)
                kq = true;

            dp.close();

        }
        catch (Exception e)
        {
            // TODO: handle exception
            System.out.println(e.getMessage());
        }

        return kq;
    }
    
    /**
     * Lấy thông tin người dùng theo tên và mật khẩu
     * @param Name
     * @param Pass
     * @return NguoiDung
     */
    
    public static NguoiDung SelectNguoiDungByNameAndPassword(String Name, String Pass)
    {
        NguoiDung nd = new NguoiDung();
        
        String sql = String.format("SELECT * FROM NGUOIDUNG WHERE TENNGUOIDUNG = N'%s' AND MATKHAU = '%s'", Name,Pass);
        
        try
        {
            DataProvider dp = new DataProvider();
            dp.open();
            
            ResultSet rs = dp.ExecuteQuery(sql);
            while (rs.next())
            {
                nd.setMaNguoiDung(rs.getInt("MaNguoiDung"));
                nd.setTenNguoiDung(rs.getNString("tenNguoiDung"));
                nd.setLoai(rs.getInt("loai"));
                nd.setMatKhau(rs.getString("matKhau"));
                nd.setGhiChu(rs.getNString("ghiChu"));
            }
            
            dp.close();
        }
        catch (Exception e)
        {
            // TODO: handle exception
            System.out.println(e.getMessage());
        }
        return nd;
    }
}
